computational problem solving